﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace B4Deal.Models
{
    public class Order
    {
        private int maDH;

        public int MaDH
        {
            get { return maDH; }
            set { maDH = value; }
        }
        private int maNH;

        public int MaNH
        {
            get { return maNH; }
            set { maNH = value; }
        }
        private int maTK;

        public int MaTK
        {
            get { return maTK; }
            set { maTK = value; }
        }
        private int maKM;

        public int MaKM
        {
            get { return maKM; }
            set { maKM = value; }
        }
        private DateTime ngayDH = Convert.ToDateTime(DateTime.Now);

        public DateTime NgayDH
        {
            get { return ngayDH; }
            set { ngayDH = value; }
        }
        private int soLuong = 0;

        public int SoLuong
        {
            get { return soLuong; }
            set { soLuong = value; }
        }
        private string phiGiaoHang = "0";

        public string PhiGiaoHang
        {
            get { return phiGiaoHang; }
            set { phiGiaoHang = value; }
        }
        private int tinhTrangThanhToan = 0;

        public int TinhTrangThanhToan
        {
            get { return tinhTrangThanhToan; }
            set { tinhTrangThanhToan = value; }
        }
        private int hinhThucThanhToan = 0;

        public int HinhThucThanhToan
        {
            get { return hinhThucThanhToan; }
            set { hinhThucThanhToan = value; }
        }
        private string ghiChu;

        public string GhiChu
        {
            get { return ghiChu; }
            set { ghiChu = value; }
        }
        private int tinhTrang = 0;

        public int TinhTrang
        {
            get { return tinhTrang; }
            set { tinhTrang = value; }
        }
        private string tenSP;

        public string TenSP
        {
            get { return tenSP; }
            set { tenSP = value; }
        }

        public Order()
        {

        }
        public Order(string iTenSP, int iTinhTrang, DateTime ingayDH, int iSoLuong)
        {
            this.TenSP = iTenSP;
            this.TinhTrang = iTinhTrang;
            this.NgayDH = ingayDH;
            this.SoLuong = iSoLuong;
        }

        public Receiver QueryReceiverByOrderID()
        {
            List<Order> orders = new List<Order>();
            using (var db = new B4Deal_DataEntities())
            {
                var temp = db.NGUOINHANs.Where(u => u.MaNguoiNhan == this.MaNH).ToList()[0];
                return new Receiver(temp.HoTen, temp.DienThoai, temp.DiaChi);
            }
        }
        public int QueryPriceByOrderID()
        {
            using (var db = new B4Deal_DataEntities())
            {
                var temp = db.KHUYENMAIs.Where(o => o.MaKM == this.MaKM).ToList()[0];
                return Convert.ToInt32(temp.DonGiaMoi);
            }
        }
        public List<Order> GetOrdersByUser(TAIKHOAN user)
        {
            List<Order> orders = new List<Order>();
            using (var db = new B4Deal_DataEntities())
            {
                var temp = user.DONHANGs;
                foreach (var item in temp)
                {
                    var name = db.KHUYENMAIs.Where(x => x.MaKM == item.KhuyenMai).ToList().ElementAt(0).TenKM;
                    Order o = new Order(name, Convert.ToInt32(item.TinhTrang), Convert.ToDateTime(item.NgayDatHang), Convert.ToInt32(item.SoLuong));
                    o.MaDH = item.MaDH;
                    o.MaKM = item.KhuyenMai;
                    o.MaTK = item.TaiKhoan;
                    o.MaNH = item.NguoiNhan;
                    o.HinhThucThanhToan = (int)item.HinhThucThanhToan;
                    o.GhiChu = item.GhiChu;
                    o.PhiGiaoHang = item.PhiGiaoHang;
                    o.TinhTrangThanhToan = (int)item.TinhTrangThanhToan;
                    orders.Add(o);
                }
                return orders;
            }
        }

        public void SaveReceiver(String email, String hoten, String phone, String address)
        {
            using (var db = new B4Deal_DataEntities())
            {
                NGUOINHAN nn = new NGUOINHAN()
                   {
                       Email = email.Trim(),
                       HoTen = hoten.Trim(),
                       DienThoai = phone.Trim(),
                       DiaChi = address.Trim()
                   };
                NGUOINHAN rei = GetReicerver(nn);
                if (rei == null)
                {
                    try
                    {
                        db.AddToNGUOINHANs(nn);
                        db.SaveChanges();
                        rei = GetReicerver(nn);

                    }
                    catch (Exception ex)
                    {
                        throw new ArgumentException("Có lỗi xảy ra! Xin vui lòng kiểm tra và thử lại. " +
                           "Nếu vẫn còn lỗi xin liên hệ với admin.");
                    }
                }
                this.maNH = rei.MaNguoiNhan;
            }
        }

        public bool SaveOrders()
        {
            using (var db = new B4Deal_DataEntities())
            {
                try
                {
                    DONHANG dh = new DONHANG();
                    dh.GhiChu = GhiChu;
                    dh.KhuyenMai = MaKM;
                    dh.TaiKhoan = MaTK;
                    dh.NguoiNhan = MaNH;
                    dh.NgayDatHang = NgayDH;
                    dh.SoLuong = SoLuong;
                    dh.TinhTrang = TinhTrang;
                    dh.PhiGiaoHang = PhiGiaoHang;
                    dh.TinhTrangThanhToan = TinhTrangThanhToan;
                    dh.HinhThucThanhToan = HinhThucThanhToan;
                    db.AddToDONHANGs(dh);
                    db.SaveChanges();
                }
                catch (Exception ex)
                {
                    throw new ArgumentException("Có lỗi xảy ra! Xin vui lòng kiểm tra và thử lại. " +
                       "Nếu vẫn còn lỗi xin liên hệ với admin.");
                }
            }
            return true;
        }

        private NGUOINHAN GetReicerver(NGUOINHAN nn)
        {
            NGUOINHAN o = null;
            using (var db = new B4Deal_DataEntities())
            {
                o = (from i in db.NGUOINHANs
                     where i.Email.Trim().Equals(nn.Email) && i.HoTen.Trim().Equals(nn.HoTen) && i.DiaChi.Trim().Equals(nn.DiaChi)
                     && i.DienThoai.Trim().Equals(nn.DienThoai)
                     select i).FirstOrDefault();
            }
            return o;
        }
    }
}